#include "qhswidget.h"
#include <QDebug>

QHSWidget::QHSWidget(QString templateType, QString widgetName, QString widgetId, QObject *parent) :
    QObject(parent), iTemplateType(templateType.toStdString()), iWidgetName(widgetName.toStdString()), iWidgetId(widgetId.toStdString()), iWidget(0)
{
    iHsWidgetPublisher = new (ELeave) Hs::HsWidgetPublisher( this );
}

QHSWidget::~QHSWidget()
{
    delete iHsWidgetPublisher;
}

void QHSWidget::RegisterWidget()
{
    try
    {
    iWidget = &iHsWidgetPublisher->getHsWidget( iTemplateType, iWidgetName, iWidgetId );
    } catch (...)
    {
        iWidget = &iHsWidgetPublisher->createHsWidget(iTemplateType, iWidgetName, iWidgetId);
    }
}

void QHSWidget::PublishWidget()
{
    if (iWidget)
        iHsWidgetPublisher->publishHsWidget(*iWidget);
}

void QHSWidget::SetItem(QString item, QString value)
{
    if (iWidget)
        iWidget->setItem( item.toStdString(), value.toStdString() );
}

void QHSWidget::SetItem(QString item, int value)
{
    if (iWidget)
        iWidget->setItem( item.toStdString(), value );
}

void QHSWidget::RemoveWidget()
{
    iHsWidgetPublisher->removeHsWidget( iTemplateType,
                                        iWidgetName, iWidgetId);
    iWidget = 0;
}

void QHSWidget::handleEvent( std::string aWidgetName,
                             QHSEvent aEvent )
{
    if (aWidgetName.compare(iWidgetName) == 0)
        emit handleEvent(this, aEvent);
}

void QHSWidget::handleItemEvent( std::string aWidgetName,
                                 std::string aTemplateItemName,    QHSItemEvent aEvent)
{
    if (aWidgetName.compare(iWidgetName) == 0)
        emit handleItemEvent(this, QString::fromUtf8(aTemplateItemName.c_str()), aEvent);
}


QString QHSWidget::WidgetName()
{
    return QString::fromUtf8(iWidgetName.c_str());
}

